home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Almathera Ten Pack 2: CDPD 1
/
Almathera Ten on Ten - Disc 2: CDPD 1.iso
/
pd
/
351-375
/
361
/
xcolor-lib
/
colourrequester.dok
< prev
next >
Wrap
Text File
|
1995-03-14
|
9KB
|
266 lines
ColourRequester - XColor library
Roger Fischlin
Steigerwaldweg 6
6450 Hanau 7
West Germany
Der ColourRequester wird über eine Struktur gesteuert, durch Sprung-
vektoren kann der Programmierer direkt eingreifen und eigene Routine
einbauen. Zum Start muß aber nur ein Teil der Struktur initialisiert
sein :
ColourRequester-Struktur
CR_Screen : Zeiger auf den Screen, auf dem der Requester er-
scheinen soll.
CR_TextColour : Textfarbe
CR_BackColour : Hintergrundfarbe
CR_GBorderColour : Farbe der Gadget-Boxen
CR_GTextColour : Textfarbe in Gadgets
CR_Flags : folgende Flags gibt es :
FLAG_HSV :anstatt der RGB- wird die HSV-Farb-
bestimmung genutzt.
FLAG_RGB :es wird die RGB-Farbbestimmung genutzt.
FLAG_HEX :die RGB-Werte werden in Hex angegeben
FLAG_NORMAL :die RGB-Werte werden dezimal angegeben
FLAG_NOWINDOWDEPTH:Der User kann das Window nicht hinter
ein anderes Window verschieben.
FLAG_NOWINDOWDRAG :Der Requester kann nicht bewegt
werden.
CR_LeftEdge : x-Position des Requesters
CR_TopEdge : y-Position des Requesters
CR_Font : Zeiger auf die Font-Struktur für OpenFont, bei 0
wird der Default-Zeichensatz verwendet (sollte 8x8
groß sein).
CR_DefaultEntries: Anzahl der Einträge der Default-ColorMap
CR_Default- : Zeiger auf Default-ColorMap oder 0
ColorMap
CR_JMPWindow ¹ : Vektor, der angesprungen wird (d0=^NewWindow), bevor
das Window geöffnet wird.
Bei 0 passiert nichts.
CR_JMPMessage ¹ : Vektor, der angesprungen wird , wenn der Requester
über den Window-Port eine nicht verwertbare Message
erhält.
Bei 0 passiert nichts.
CR_JMPMode ¹ : Vektor, der angesprungen wird (d0= gewählte Farbe),
wenn in einem nicht definierten Mode eine Farbe gewählt
wurde.
Bei 0 passiert nichts.
CR_JMPDraw ¹ : Vektor, der angesprungen wird (d0=^Window), wenn
das Window geöffnet wurde.
Bei 0 passiert nichts.
CR_ScreenTitle : Zeiger auf Screen-Titel, wenn das Requester-Window
aktiv ist. Bei 0 bleibt die Screentitelleiste leer.
CR_DefaultWTitle : Zeiger auf Window-Titel, wenn kein Mode gewählt ist
(wie z.B. COPY). Bei 0 bleibt die Windowtitelleiste
leer.
¹ Diese Vektoren dienen Programmieren, die eigene Gagets und Rountinen
in den Requester einbauen möchten. Sind alle vier Vektoren 0, so er-
scheint der unveränderte Rquester.
Der folgende Strukturteil wird vom Requester genutzt, bietet aber beim
Einbau eigener Routinen wichtige Daten :
CR_imClass : Class der Intuition-Message an den Window-Port
CR_imCode : Code der Intuition-Message an den Window-Port
CR_imQualifier : Qualifier der Intuition-Message an den Window-Port
CR_imIAddress : IAddress der Intuition-Message an den Window-Port
CR_imMouseX : MouseX der Intuition-Message an den Window-Port
CR_imMouseY : MouseY der Intuition-Message an den Window-Port
CR_WindowPointer : Zeiger auf die Window-Struktur
CR_UndoSize : Enträge der Undo-ColorMap
CR_UndoBuffer : Zeiger auf Undo-ColorMap
CR_Undo : RGB-Wert des aktuellen Stiftes (für Undo)
CR_Colour : Index der aktuellen Farbe
CR_MemorySize : Größe des belegten Speichers (für Gadgets,Undo-Puffer,
NewWindow-Struktur)
CR_Memory : Zeiger auf belegten Speicherbereich
CR_NewWindow : Zeiger auf NewWindow-Struktur
CR_Mode : Modus, z.B. COPY,EXCHANGE oder SPREAD.
CR_WindowTitle : Zeiger auf Windowtitel, der mit bei neuem Mode gesetzt
werden soll.
CR_Reserved : reservierte Einträge
Gebrauch des ColourRequesters
1. einfache Anwendung - ohne eigene Routinen
--------------------------------------------
· ersten Teil der Struktur initialisieren,Vektoren UND CR_Mode (!) auf
0 setzen
· ColourRequester aufrufen, ein negativer Rückgabewert signalisiert
einen Fehler (Speicher fehlt, Window kann nicht geöffnet werden..)
Beispielprogramm : DEMO_I
2. mit eigenen Routinen
-------------------------
Möchten man daß Intuition weitere Events meldet, so ist über den
CR_JMPWindow-Vektor die NewWindow-Struktur zu modifizieren. Die
folgenden IDCMP-Flags werden automatisch gesetzt:
· GADGETDOWN
· GADGETUP
Auch sind dann eigenen Gadgets an die bestehenden anzuhängen,indem
Sie sich über gg_NextGadget bis zum letzten Gadget vorkämpfen. Bei
allen Modifikationen gilt es zu beachten, daß Sie über Pointer
zu den Werten der Gadgets gelangen. ABSOLUTE OFFSETS FÜR DIE GADGETS
DÜRFEN SIE NICHT VERWENDEN, da eventuell diese sich bei einer neuen
Version der Library sich ändern können. Bei den GadgetIDs von eigenen
Gadgets muß ober oberste Bit (15) setzt sein, um nicht in Konflikt
mit requestereigenen Gadgets zu kommen.
Verwenden sie den CR_JMPDraw-Vektor, wenn grafische Elemente , wie
z.B. Texte, in den Requester gezeichnet werden sollten.
Empfängt der ColourRequester nun eine Messsage, legt er deren wichtigen
Werten in der ColourRequester-Struktur (zweiter Teil) ab. Schreiben
Sie nun die Adresse Ihrer eigenen Abfrage-Routine in den
CR_JMPMessage-Vektor.
Es gilt zwei grundlegende Funktionen zu unterscheiden :
· Funktionen, die direkt ausgeführt werden können, z.B. ANTIQUE
· Funktionen, die eine zweites Argument (Farbe) verlangen, z.B. COPY
Handelt es sich bei Ihrer Funktion um die erste Klasse, so müssen
Sie dem Programm mitteilen (in d0) , wie es reagieren soll, nach dem
Sie Ihre Routine ausgeführt haben und mit RTS zum Requester zurück-
kehren :
· CR_NOTHING : Der ColourRequester macht nichts, sondern
kehrt in die Warteschleife zurück.
Beispiel : Die Message wurde nicht verwertet.
· CR_REMAKE : Der gesammte Aufbau wird neu gezeichnet
Beispiel : Das Window wurde verkleinert und
soll nun wieder vergrößert werden.
· CR_EXIT : Der Requester wird geschlossen .
Beispiel : Auf ESC soll der ColourRequester
verschwinden.
· CR_NEWCOLOUR : Es wurde in CR_Colour eine neue Farbe einge-
tragen, nun sollen die Schieberegler annge-
paßt werden.
Beispiel : mit den Cursortasten sollen die
Farben durchgeschaltet werden können.
· CR_UPDATECOLOUR : Die Zusammensetztung der Farbe hat sich ge-
ändert, nun sollen die Schieberegler angepaßt
werden.
Beispiel: Auf Tastendruck wurden die RGB-Werte
halbiert.
Warten Ihrere Funktion, daß der User ein Farbe anklickt, so sollten
Sie es ihm mitteilen,indem Sie der Windowtitel entsprechend ändern,
dazu muß in CR_WindowTitle den Zeiger auf den Text eingetragen werden.
Jetzt müssen Sie nur noch dem Requester mitteilen , daß er sich in
einem anderen Modus befindet, da sonst der Requester meinte, daß der
User die angeklickte Farbe verändern möchte.
Tragen Sie deshalb in CR_Mode ein eigene Identifikationswert (Bit 31
setzen, um nicht mit requestereigenen Modis in Konflikt zu kommen),
der der Requester signalisiert, daß nach dem der User eine weitere Farbe
angeklickt hat, er über CR_JMPMode zu Ihrer Routine springen soll.
Der Rückgabewert bei einer Modusänderung ist CR_Mode.
Testen Sie aber bitte zuvor, ob sich der Requester bereits in Ihrem
Modus befinden. Sollte dies der Fall sein, löschen Sie CR_Modus und
übertragen Sie den Inhalt von CR_DefaultWTitle nach CR_WindowTitle.
Dies bewirkt, daß , wenn sich der dann User anders entscheidet, einfach
durch erneutes anwählen Ihre Funktion abbricht.
Wird nun die zweite Farbe angeklickt und der Requester ist in einem
nicht-requester Mode, sprint er zum CR_JMPMode-Vektor, d0 enthält den
Index der zweiten Farbe. Führen Sie nun Ihre Funktion aus, und ver-
gessen Sie nicht, den Modus wieder zu löschen, sowie CR_DefaultWTitle
nach CR_WindowTitle zu kopieren.
Als Rückgabewerte stehen Ihnen die gleichen wie bei CR_JMPMessage zur
Verfügung, wobei in allen FÄllen den neue Mode automatisch gestzt wird.
Beispielprogramm : DEMO_II